package br.com.canvasForAll.model.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "SUBATIVIDADE")
@NamedQueries(value = {
		@NamedQuery(name = "Subatividade.pesquisa", query = "SELECT s FROM Subatividade s"),
		@NamedQuery(name = "Subatividade.duplicata", query = "SELECT COUNT(s) FROM Subatividade s WHERE s.id = :id")
})
public class Subatividade implements Serializable {

	private static final long serialVersionUID = -5189666570103614972L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID_SUBATIVIDADE")
	private Long id;
	
	@Column(name = "DESCRICAO_SUBATIVIDADE", nullable = false, columnDefinition = "TEXT")
	private String descricaoSubatividade;
	
	@Column(name = "FLAG_CONCLUIDO", nullable = false, columnDefinition = "CHAR(1)", length = 1)
	private Boolean flagConcluido;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_CRIACAO", nullable = true)
	private Date dataConcluido;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_ATUALIZACAO", nullable = false)
	private Date dataUltimaAtualizacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_SINCRONIZACAO", nullable = true)
	private Date dataUltimaSincronizacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_NOTIFICACAO", nullable = true)
	private Date dataUltimaNotificacao;
	
	@Column(name = "FLAG_LOCAL_CRIACAO", length = 1, columnDefinition = "CHAR")
	private String localCriacao;
	
	@Column(name = "FLAG_NOTIFICAR", length = 1, columnDefinition = "CHAR")
	private String notificar;
	
	@ManyToOne(cascade = CascadeType.ALL, targetEntity = Postit.class, optional = false, fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_POSTIT", referencedColumnName = "ID_POSTIT")
	private Postit postit;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_PERFIL", nullable = false)
	private Perfil perfil;
	
	public Subatividade(){
		this.localCriacao = "M";
		this.notificar = "S";
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDescricaoSubatividade() {
		return descricaoSubatividade;
	}

	public void setDescricaoSubatividade(String descricaoSubatividade) {
		this.descricaoSubatividade = descricaoSubatividade;
	}

	public Boolean getFlagConcluido() {
		return flagConcluido;
	}

	public void setFlagConcluido(Boolean flagConcluido) {
		this.flagConcluido = flagConcluido;
	}

	public Date getDataConcluido() {
		return dataConcluido;
	}

	public void setDataConcluido(Date dataConcluido) {
		this.dataConcluido = dataConcluido;
	}

	public Date getDataUltimaAtualizacao() {
		return dataUltimaAtualizacao;
	}

	public void setDataUltimaAtualizacao(Date dataUltimaAtualizacao) {
		this.dataUltimaAtualizacao = dataUltimaAtualizacao;
	}

	public Postit getPostit() {
		return postit;
	}

	public void setPostit(Postit postit) {
		this.postit = postit;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public Date getDataUltimaSincronizacao() {
		return dataUltimaSincronizacao;
	}

	public void setDataUltimaSincronizacao(Date dataUltimaSincronizacao) {
		this.dataUltimaSincronizacao = dataUltimaSincronizacao;
	}

	public Date getDataUltimaNotificacao() {
		return dataUltimaNotificacao;
	}

	public void setDataUltimaNotificacao(Date dataUltimaNotificacao) {
		this.dataUltimaNotificacao = dataUltimaNotificacao;
	}

	public String getLocalCriacao() {
		return localCriacao;
	}

	public void setLocalCriacao(String localCriacao) {
		this.localCriacao = localCriacao;
	}

	public String getNotificar() {
		return notificar;
	}

	public void setNotificar(String notificar) {
		this.notificar = notificar;
	}
	
}
